The present application relates to computing and more specifically to software and associated systems and method for facilitating determining, adjusting, and/or analyzing allocation of or configuration of computing resources in a computing environment.
Software for facilitating computing resource allocation is employed in various demanding applications, including desktop operating system software for coordinating the sharing of Random Access Memory (RAM) among running software applications, and distributed software application component memory allocation in networked computing environments, such as cloud-based enterprise computing environments. Such applications often demand cost-effective user friendly mechanisms for facilitating allocating computing resources so as to mitigate program errors, improve system performance, enable efficient utilization of resources, and so on.
Mechanisms for facilitating efficient computing resource allocation e.g., allocation of RAM, are particularly important in enterprise computing environments, where a given software application may be implemented via thousands of virtual machines running on one or more server clusters, complicating virtual machine memory allocation or sizing tasks.
In general, virtual machines, e.g., Java Virtual Machines (JVMs), which may be software-based representations or implementations of computer systems, are often employed in enterprise computing environments that employ cloud services to deploy software applications for use by customers. Such environments may include many servers and accompanying JVMs spread across multiple datacenters serving thousands of customers.
Enterprise application architectures often require multiple JVM processes colocated and running in tandem on the same host or virtual host. Determining the optimal sizing and configuration of the virtual machines can be a complicated, yet critical task for ensuring optimal use of available primary memory resources; optimal application performance given available resources; and robust system stability in relation to memory utilization and the impact of process swapping.
Determining and setting appropriate virtual machine sizing (i.e., determining the amount of RAM to be allocated for use by a virtual machine) can be a major operational challenge for enterprises wishing to improve or optimize memory utilization and reduce risks of memory over allocation, under allocation, and system instability.
Conventionally, virtual machines are often initially provisioned (for use by customers of cloud services in an enterprise computing environment) with relatively small default memory sizes. The default memory sizes are often not changed after initial provisioning and use. However, this can lead to sub-optimal use of computing resources and associated errors.
Alternatively, initially sized virtual machines are resized manually during provisioning or implementation of software included in the computing environment. However, such virtual machine resizing is often problematic, also resulting in poor resource utilization, application errors, and/or performance degradation issues.
In general, enterprise system and application administration organizations may lack sufficient combined knowledge, experience, and/or statistical data to accurately, consistently and rapidly determine and implement optimum virtual machine sizing and configurations. Such configurations can be time consuming and costly to establish and deploy, and once deployed, any non-optimal JVM sizing may result in underutilization of expensive computing resources, poor application performance and/or system instability, and so on.
Hence, conventional approaches to virtual machine sizing can be prohibitively costly and time consuming and may lead to memory over utilization or underutilization and associated errors and/or application performance degradation.